<!DOCTYPE html>
<html lang=zh>
<head>
    <meta charset="utf-8">
    

    <meta name="baidu-site-verification" content="lt822VnP06" />
    <meta name="baidu-site-verification" content="0Ajixw1Puk" />
    <meta name="google-site-verification" content="gCQD0Y6f0YlPTZTAjp_mqms4C7TlkMWrg3Xy0mFdMwI" />
    <title>读书笔记-Linux Bible 9th Edition之玩转文本文件 | Giraffe&#39;s Home</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
    <meta name="description" content="根据书的第5章整理一下关于操作文本文件的常用命令。在Linux系统中许多信息都是在文本文件中管理的,所以熟练掌握对文本文件的更改，查找是很重要的。这一点，在出bug查找服务器日志时真是深有体会啊！😼😼

相关博客: Linux Bible 9th Edition之使用shell Linux Bible 9th Edition之文件系统 Linux Bible 9th Edition之进程大法">
<meta property="og:type" content="article">
<meta property="og:title" content="读书笔记-Linux Bible 9th Edition之玩转文本文件">
<meta property="og:url" content="http://yemengying.com/2015/11/30/读书笔记-Linux-Bible-9th-Edition之玩转文本文件/index.html">
<meta property="og:site_name" content="Giraffe's Home">
<meta property="og:description" content="根据书的第5章整理一下关于操作文本文件的常用命令。在Linux系统中许多信息都是在文本文件中管理的,所以熟练掌握对文本文件的更改，查找是很重要的。这一点，在出bug查找服务器日志时真是深有体会啊！😼😼

相关博客: Linux Bible 9th Edition之使用shell Linux Bible 9th Edition之文件系统 Linux Bible 9th Edition之进程大法">
<meta property="og:image" content="http://yemengying.com/images/thumbnail9.jpg">
<meta property="og:updated_time" content="2018-12-14T09:18:57.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="读书笔记-Linux Bible 9th Edition之玩转文本文件">
<meta name="twitter:description" content="根据书的第5章整理一下关于操作文本文件的常用命令。在Linux系统中许多信息都是在文本文件中管理的,所以熟练掌握对文本文件的更改，查找是很重要的。这一点，在出bug查找服务器日志时真是深有体会啊！😼😼

相关博客: Linux Bible 9th Edition之使用shell Linux Bible 9th Edition之文件系统 Linux Bible 9th Edition之进程大法">
<meta name="twitter:image" content="http://yemengying.com/images/thumbnail9.jpg">
    

    

    
        <link rel="icon" href="https://yemengying.com/qiniu/image/image/favicon.png" />
    


    <link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">
    <link rel="stylesheet" href="/lib/open-sans/styles.css">
    <link rel="stylesheet" href="/lib/source-code-pro/styles.css">

    <link rel="stylesheet" href="/css/style.css">

    <script src="/lib/jquery/2.1.3/jquery.min.js"></script>
    
    
        <link rel="stylesheet" href="/lib/fancybox/jquery.fancybox.css">
    
    
        <script type="text/javascript">
(function(i,s,o,g,r,a,m) {i['GoogleAnalyticsObject']=r;i[r]=i[r]||function() {
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-75861791-1', 'auto');
ga('send', 'pageview');

</script>
    
    
    
        <script>
var _hmt = _hmt || [];
(function() {
    var hm = document.createElement("script");
    hm.src = "//hm.baidu.com/hm.js?44bb8bfb1a576270255713e37746eb82";
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(hm, s);
})();
</script>

    

</head>
<body>
    <script src="//github.elemecdn.com/jiananshi/req/0.1.0/lib/req.js"></script>
    <script src="//npm.elemecdn.com/jinkela@1.2.18/umd.js"></script>
    <script src="//github.elemecdn.com/jiananshi/DisqusJS/2.0.8/index.js"></script>
    <div id="container">
        <header id="header">
    <div id="header-main" class="header-inner">
        <div class="outer">
            <a href="/" id="logo">
                <i class="logo"></i>
                <span class="site-title">Giraffe&#39;s Home</span>
            </a>
            <nav id="main-nav">
                
                    <a class="main-nav-link" href="/.">首页</a>
                
                    <a class="main-nav-link" href="/archives">归档</a>
                
                    <a class="main-nav-link" href="/categories">分类</a>
                
                    <a class="main-nav-link" href="/tags">标签</a>
                
                    <a class="main-nav-link" href="/about">关于</a>
                
                    <a class="main-nav-link" href="/message">留言</a>
                
                    <a class="main-nav-link" href="/friends">友链</a>
                
                    <a class="main-nav-link" href="/reading">正在读...</a>
                
            </nav>
            
                
                <nav id="sub-nav">
                    <div class="profile" id="profile-nav">
                        <a id="profile-anchor" href="javascript:;">
                            <img class="avatar" src="https://pic.yupoo.com/jiananshi/e85e4303/735cf286.jpeg" />
                            <i class="fa fa-caret-down"></i>
                        </a>
                    </div>
                </nav>
            
            <div id="search-form-wrap">

    <form class="search-form">
        <input type="text" class="ins-search-input search-form-input" placeholder="搜索" />
        <button type="submit" class="search-form-submit"></button>
    </form>
    <div class="ins-search">
    <div class="ins-search-mask"></div>
    <div class="ins-search-container">
        <div class="ins-input-wrapper">
            <input type="text" class="ins-search-input" placeholder="想要查找什么..." />
            <span class="ins-close ins-selectable"><i class="fa fa-times-circle"></i></span>
        </div>
        <div class="ins-section-wrapper">
            <div class="ins-section-container"></div>
        </div>
    </div>
</div>
<script>
(function (window) {
    var INSIGHT_CONFIG = {
        TRANSLATION: {
            POSTS: '文章',
            PAGES: '页面',
            CATEGORIES: '分类',
            TAGS: '标签',
            UNTITLED: '(未命名)',
        },
        ROOT_URL: '/',
        CONTENT_URL: '/content.json',
    };
    window.INSIGHT_CONFIG = INSIGHT_CONFIG;
})(window);
</script>
<script src="/js/insight.js"></script>

</div>
        </div>
    </div>
    <div id="main-nav-mobile" class="header-sub header-inner">
        <table class="menu outer">
            <tr>
                
                    <td><a class="main-nav-link" href="/.">首页</a></td>
                
                    <td><a class="main-nav-link" href="/archives">归档</a></td>
                
                    <td><a class="main-nav-link" href="/categories">分类</a></td>
                
                    <td><a class="main-nav-link" href="/tags">标签</a></td>
                
                    <td><a class="main-nav-link" href="/about">关于</a></td>
                
                    <td><a class="main-nav-link" href="/message">留言</a></td>
                
                    <td><a class="main-nav-link" href="/friends">友链</a></td>
                
                    <td><a class="main-nav-link" href="/reading">正在读...</a></td>
                
                <td>
                    
    <div class="search-form">
        <input type="text" class="ins-search-input search-form-input" placeholder="搜索" />
    </div>

                </td>
            </tr>
        </table>
    </div>
</header>

        <div class="outer">
            
                

<aside id="profile">
    <div class="inner profile-inner">
        <div class="base-info profile-block">
            <img id="avatar" src="https://pic.yupoo.com/jiananshi/e85e4303/735cf286.jpeg" />
            <h2 id="name">Giraffe</h2>
            <h3 id="title">Java Developer</h3>
            <span id="location"><i class="fa fa-map-marker"></i>Shanghai, China</span>
            <a id="follow" target="_blank" href="https://github.com/giraffe0813/">关注我</a>
        </div>
        <div class="article-info profile-block">
            <div class="article-info-block">
                56
                <span>文章</span>
            </div>
            <div class="article-info-block">
                36
                <span>标签</span>
            </div>
        </div>
        <div class="profile-block recent-comments">
            <p class="recent-comments-title">最新评论</p>
            <ul id="disqus-recent-comments" class="recent-comments-container">
            </ul>
        </div>
        
        <div class="profile-block social-links">
            <table>
                <tr>
                    
                    
                    <td>
                        <a href="http://github.com/giraffe0813" target="_blank" title="github" class=tooltip>
                            <i class="fa fa-github"></i>
                        </a>
                    </td>
                    
                    <td>
                        <a href="/atom.xml" target="_blank" title="rss" class=tooltip>
                            <i class="fa fa-rss"></i>
                        </a>
                    </td>
                    
                </tr>
            </table>
        </div>
        
    </div>
</aside>

            
            <section id="main"><article id="2015/11/30/读书笔记-Linux-Bible-9th-Edition之玩转文本文件/" class="article article-type-post" itemscope itemprop="blogPost">
    <div class="article-inner">
        
        
        
            <header class="article-header">
                
    
        <h1 class="article-title" itemprop="name">
            读书笔记-Linux Bible 9th Edition之玩转文本文件
        </h1>
    

                <div class="article-meta">
                    
    <div class="article-date">
        <i class="fa fa-calendar"></i>
        <a href="/2015/11/30/读书笔记-Linux-Bible-9th-Edition之玩转文本文件/">
            <time datetime="2015-11-30T07:04:46.000Z" itemprop="datePublished">2015-11-30</time>
        </a>
    </div>


                    
    <div class="article-category">
    	<i class="fa fa-folder"></i>
        <a class="article-category-link" href="/categories/linux/">linux</a>
    </div>

                    
    <div class="article-tag">
        <i class="fa fa-tag"></i>
        <a class="tag-link" href="/tags/linux/">linux</a>, <a class="tag-link" href="/tags/读书笔记/">读书笔记</a>
    </div>

                </div>
            </header>
        
        <div class="article-entry" itemprop="articleBody">
        
            
                <div id="toc" class="toc-article">
                <strong class="toc-title">文章目录</strong>
                    <ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#使用vim和vi编辑文件"><span class="toc-number">1.</span> <span class="toc-text">使用vim和vi编辑文件</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#添加文件内容"><span class="toc-number">1.1.</span> <span class="toc-text">添加文件内容</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#在文本中移动"><span class="toc-number">1.2.</span> <span class="toc-text">在文本中移动</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#删除，复制，更改文本"><span class="toc-number">1.3.</span> <span class="toc-text">删除，复制，更改文本</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#粘贴"><span class="toc-number">1.4.</span> <span class="toc-text">粘贴</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#在文件中跳跃"><span class="toc-number">1.5.</span> <span class="toc-text">在文件中跳跃</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#查找文本"><span class="toc-number">1.6.</span> <span class="toc-text">查找文本</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#使用ex模式"><span class="toc-number">1.7.</span> <span class="toc-text">使用ex模式</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#退出vi"><span class="toc-number">1.8.</span> <span class="toc-text">退出vi</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#查找文件"><span class="toc-number">2.</span> <span class="toc-text">查找文件</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#使用localte命令查找文件"><span class="toc-number">2.1.</span> <span class="toc-text">使用localte命令查找文件</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#使用find命令查找文件"><span class="toc-number">2.2.</span> <span class="toc-text">使用find命令查找文件</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#使用grep命令在文件中查找"><span class="toc-number">2.3.</span> <span class="toc-text">使用grep命令在文件中查找</span></a></li></ol></li></ol>
                </div>
            
            <blockquote>
<p>根据书的第5章整理一下关于操作文本文件的常用命令。在Linux系统中许多信息都是在文本文件中管理的,所以熟练掌握对文本文件的更改，查找是很重要的。这一点，在出bug查找服务器日志时真是深有体会啊！😼😼</p>
</blockquote>
<p>相关博客:<br> <a href="http://yemengying.com/2015/11/23/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0-Linux-Bible-9th-Edition/">Linux Bible 9th Edition之使用shell</a><br> <a href="http://yemengying.com/2015/11/26/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0-Linux-Bible-9th-Edition%E4%B9%8B%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/">Linux Bible 9th Edition之文件系统</a><br> <a href="http://yemengying.com/2015/12/24/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0-Linux-Bible-9th-Edition%E4%B9%8B%E8%BF%9B%E7%A8%8B%E5%A4%A7%E6%B3%95%E5%A5%BD/">Linux Bible 9th Edition之进程大法好</a></p>
<a id="more"></a>
<h3 id="使用vim和vi编辑文件"><a href="#使用vim和vi编辑文件" class="headerlink" title="使用vim和vi编辑文件"></a>使用vim和vi编辑文件</h3><blockquote>
<p>刚接触vi编辑器可能会觉得有点难，不过当你熟悉了之后可以只用键盘就能快速高效的编辑文件，无需使用鼠标或功能键。(如果觉得vi不适合你，可以选择其它的文本编辑器，比如:nano,gedit,jed,kate,kedit,mcedit,nedit…等等)</p>
</blockquote>
<p>从最常见的打开文件的开始了解vi<br>打开文件:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">$ vi <span class="built_in">test</span></div></pre></td></tr></table></figure>
<p>如果这是一个空的文件，你会看到类似下图的东东。最上面闪烁的东东代表了光标的当前位置，最下面的一行显示了关于文件的一些信息,中间的”~”符号代表没有内容。<br><img src="https://pic.yupoo.com/jiananshi/abf86b8c/6d33a78c.jpg" alt="使用vi打开一个空文件"><br>当你看到这个界面可能会感觉不知所措，因为没有任何菜单，提示和图标来告诉你该做什么。更恐怖的是，你不能直接输入，否则会听见”嘟嘟”的声音。</p>
<h4 id="添加文件内容"><a href="#添加文件内容" class="headerlink" title="添加文件内容"></a>添加文件内容</h4><p>不要怕,首先,需要了解两种主要的模式:命令模式(command)和编辑模式(input)。vi编辑器以命令模式启动，在添加或改变文本内容之前需输入命令来告诉vi你想要做什么(大小写敏感)。输入下面的命令就可以进入编辑模式，当编辑结束后，按<em>Esc</em>键就可以回到命令模式。</p>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">a</td>
<td style="text-align:left">可以在光标右侧开始插入文本</td>
</tr>
<tr>
<td style="text-align:left">A</td>
<td style="text-align:left">可以在当前行的最后开始插入文本</td>
</tr>
<tr>
<td style="text-align:left">i</td>
<td style="text-align:left">可以在光标左侧开始插入文本</td>
</tr>
<tr>
<td style="text-align:left">I</td>
<td style="text-align:left">可以在当前行的最前面开始插入文本</td>
</tr>
<tr>
<td style="text-align:left">o</td>
<td style="text-align:left">在当前行下面 插入新的一行 </td>
</tr>
<tr>
<td style="text-align:left">O</td>
<td style="text-align:left">在当前行上面 插入新的一行</td>
</tr>
</tbody>
</table>
<blockquote>
<p><img src="https://pic.yupoo.com/jiananshi/a2e7f629/26416fb9.jpg" alt="提示"> 当进入编辑模式时，屏幕下方会出现– INSERT –；编辑结束后，按<em>Esc</em>键就可以回到命令模式。不过如果输入了”:”符号，需要按两下<em>Esc</em>键</p>
</blockquote>
<h4 id="在文本中移动"><a href="#在文本中移动" class="headerlink" title="在文本中移动"></a>在文本中移动</h4><p>可以使用方向键可以在文本中移动光标，但还有一些小技巧可以让我们更方便的在文本中移动</p>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">w</td>
<td style="text-align:left">光标移到下一个单词的开头(单词以spaces,tabs,标点界定)</td>
</tr>
<tr>
<td style="text-align:left">W</td>
<td style="text-align:left">光标移到下一个单词的开头(单词以spaces,tabs界定)</td>
</tr>
<tr>
<td style="text-align:left">b</td>
<td style="text-align:left">光标移到前一个单词的开头(单词以spaces,tabs,标点界定)</td>
</tr>
<tr>
<td style="text-align:left">B</td>
<td style="text-align:left">光标移到前一个单词的开头(单词以spaces,tabs界定)</td>
</tr>
<tr>
<td style="text-align:left">0(zero)</td>
<td style="text-align:left">光标移到当前行的最前面</td>
</tr>
<tr>
<td style="text-align:left">$</td>
<td style="text-align:left">光标移到当前行的最后</td>
</tr>
<tr>
<td style="text-align:left">H</td>
<td style="text-align:left">光标移到屏幕的左上角</td>
</tr>
<tr>
<td style="text-align:left">M</td>
<td style="text-align:left">移到中间行第一个字符</td>
</tr>
<tr>
<td style="text-align:left">L</td>
<td style="text-align:left">光标移到屏幕的左下角</td>
</tr>
</tbody>
</table>
<h4 id="删除，复制，更改文本"><a href="#删除，复制，更改文本" class="headerlink" title="删除，复制，更改文本"></a>删除，复制，更改文本</h4><p>了解了如何添加文本和移动光标是远远不够的，还需要知道如何删除，复制和更改文本。命令x,d,y,c等可以帮助我们删除和修改文本，这些命令也可以和移动光标的命令(上一个表格中提到的)或者数字配合使用来告诉编辑器确切的操作是什么。</p>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">x</td>
<td style="text-align:left">删除光标所在位置的字符</td>
</tr>
<tr>
<td style="text-align:left">X</td>
<td style="text-align:left">删除光标所在位置的前一个字符</td>
</tr>
<tr>
<td style="text-align:left">d?</td>
<td style="text-align:left">删除一些文本</td>
</tr>
<tr>
<td style="text-align:left">c?</td>
<td style="text-align:left">更改一些文本</td>
</tr>
<tr>
<td style="text-align:left">y?</td>
<td style="text-align:left">复制一些文本</td>
</tr>
</tbody>
</table>
<p>?代表这些命令要和移动光标的命令配合着使用，下面是一些例子</p>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">dw</td>
<td style="text-align:left">删除当前光标位置的后一个单词</td>
</tr>
<tr>
<td style="text-align:left">db</td>
<td style="text-align:left">删除当前光标位置的前一个单词</td>
</tr>
<tr>
<td style="text-align:left">dd</td>
<td style="text-align:left">删除当前一整行</td>
</tr>
<tr>
<td style="text-align:left">c$</td>
<td style="text-align:left">更改(实际上是擦除)从当前位置到当前行最后的内容，并进入编辑模式</td>
</tr>
<tr>
<td style="text-align:left">c0</td>
<td style="text-align:left">更改(实际上是擦除)从当前位置到当前行最前面的内容，并进入编辑模式</td>
</tr>
<tr>
<td style="text-align:left">yy</td>
<td style="text-align:left">将当前行复制到buffer中</td>
</tr>
</tbody>
</table>
<p>上面这些命令也可以和数字配合使用,下面是栗子🌰</p>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">3dd</td>
<td style="text-align:left">删除当前行往下的三行</td>
</tr>
<tr>
<td style="text-align:left">3dw</td>
<td style="text-align:left">删除接下来的三个单词</td>
</tr>
<tr>
<td style="text-align:left">5cl</td>
<td style="text-align:left">删除接下来的5个字符，并进入编辑模式</td>
</tr>
</tbody>
</table>
<h4 id="粘贴"><a href="#粘贴" class="headerlink" title="粘贴"></a>粘贴</h4><p>可以使用命令p和P，将复制到buffer中的内容粘贴到文本中。p是将缓存区的内容粘贴到当前光标所在位置的下方，P是将缓存区的内容粘贴到当前光标所在位置的上方</p>
<h4 id="在文件中跳跃"><a href="#在文件中跳跃" class="headerlink" title="在文件中跳跃"></a>在文件中跳跃</h4><table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">ctrl+f</td>
<td style="text-align:left">向下一页</td>
</tr>
<tr>
<td style="text-align:left">ctrl+b</td>
<td style="text-align:left">向上一页</td>
</tr>
<tr>
<td style="text-align:left">ctrl+d</td>
<td style="text-align:left">向下一页半</td>
</tr>
<tr>
<td style="text-align:left">ctrl+u</td>
<td style="text-align:left">向上一页半</td>
</tr>
<tr>
<td style="text-align:left">G</td>
<td style="text-align:left">跳到最后一行</td>
</tr>
<tr>
<td style="text-align:left">1G</td>
<td style="text-align:left">跳到第一行</td>
</tr>
<tr>
<td style="text-align:left">35G</td>
<td style="text-align:left">跳到第35行</td>
</tr>
</tbody>
</table>
<h4 id="查找文本"><a href="#查找文本" class="headerlink" title="查找文本"></a>查找文本</h4><p>查找文本时,”/“和”?”分别对应向前和向后查找,也可以使用一些通配符，比如/The.*foot,<br>?[pP]rint,查找之后可以按n和N来重复查找和按相反方向查找</p>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">/hello</td>
<td style="text-align:left">向前查找单词”hello”</td>
</tr>
<tr>
<td style="text-align:left">?goodbye</td>
<td style="text-align:left">向后查找单词”goodbye”</td>
</tr>
</tbody>
</table>
<h4 id="使用ex模式"><a href="#使用ex模式" class="headerlink" title="使用ex模式"></a>使用ex模式</h4><p>当输入冒号,并且光标在最下方时就进入了ex模式，下面是一些在ex模式下查找，修改文本的栗子🌰</p>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">:g/local</td>
<td style="text-align:left">查找local 并打印</td>
</tr>
<tr>
<td style="text-align:left">:s/local/r</td>
<td style="text-align:left">将local第一次出现的位置替换为r</td>
</tr>
</tbody>
</table>
<h4 id="退出vi"><a href="#退出vi" class="headerlink" title="退出vi"></a>退出vi</h4><p>以下的命令用来保存和退出文件</p>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">ZZ</td>
<td style="text-align:left">保存修改 并退出vi</td>
</tr>
<tr>
<td style="text-align:left">:w</td>
<td style="text-align:left">保存修改 但不退出vi</td>
</tr>
<tr>
<td style="text-align:left">:wq</td>
<td style="text-align:left">与ZZ命令一样</td>
</tr>
<tr>
<td style="text-align:left">:q</td>
<td style="text-align:left">退出文件，该命令只有在没有未保存的修改下才起效</td>
</tr>
<tr>
<td style="text-align:left">:q!</td>
<td style="text-align:left">退出文件 不保存对文件的修改</td>
</tr>
</tbody>
</table>
<h3 id="查找文件"><a href="#查找文件" class="headerlink" title="查找文件"></a>查找文件</h3><blockquote>
<p>为了帮助用户更有效的查找他们的文件，linux系统提供了locate,find,grep三个命令，依次来看看他们的作用。</p>
</blockquote>
<h4 id="使用localte命令查找文件"><a href="#使用localte命令查找文件" class="headerlink" title="使用localte命令查找文件"></a>使用localte命令查找文件</h4><blockquote>
<p>大多数linux系统中，updatedb命令会每天执行一次，将系统中文件的名字存到数据库中。通过locate命令，我们可以查找存在在数据库中的文件的位置。相较于find命令，locate命令效率更高，因为它搜索数据库而不是整个文件系统。不过locate命令也有它的缺点，它并不能找到所有存放在系统的文件，因为并不是所有的文件都会存储于数据库中，/etc/updatedb.conf文件决定了哪些文件将存在于数据库中。另外，普通用户无法通过数据库查找那些他们在文件系统中没有权利查看的文件，比如，普通用户无法在/root目录下执行ls命令，那么他们也无法通过locate查找这个目录下的文件。如果用locate命令查找一个字符串，那么这个字符串可能出现在返回文件的路径的任意位置。举个栗子，查找passwd，结果可能为/etc/passwd,/usr/bin/passwd和其它路径包含passwd的文件。还需要注意的是，如果创建一个文件之后，希望立刻通过locate查找它，最好执行命令updatedb更新下数据库。</p>
</blockquote>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line">$ locate .bashrc</div><div class="line">/etc/skel/.bashrc </div><div class="line">/home/cnegus/.bashrc</div><div class="line"></div><div class="line"><span class="comment"># locate ./bashrc (身份不同 查找结果不同)</span></div><div class="line">/etc/skel/.bashrc </div><div class="line">/home/bill/.bashrc </div><div class="line">/home/joe/.bashrc </div><div class="line">/root/.bashrc</div><div class="line"></div><div class="line">$ locate -i muttrc（-i 忽略大小写）/etc/Muttrc/etc/Muttrc.local /usr/share/doc/mutt-1.5.20/sample.muttrc</div><div class="line">$ locate services (查找的字符串可能出现在文件路径中)/etc/services/usr/share/services/bmp.kmgio /usr/share/services/data.kmgio</div></pre></td></tr></table></figure>
<p>中场休息，看看我家光洙<br><img src="https://pic.yupoo.com/jiananshi/3028ed7c/a51089e2.gif" alt="李光珠"></p>
<h4 id="使用find命令查找文件"><a href="#使用find命令查找文件" class="headerlink" title="使用find命令查找文件"></a>使用find命令查找文件</h4><blockquote>
<p>由于有许多不同的属性，find命令是查找文件的利器。当执行find命令时，它会搜索整个文件系统，这会造成find命令比locate命令耗时长，但同时也能让用户查找到系统中最新的文件。find命令最大的优点在于所有你能想到的文件的属性，都可以通过它查找，例如名字，拥有者，权限，大小，修改时间等等，也可以进行组合查找。</p>
</blockquote>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line">$ find (列出当前目录下所有的文件和目录)</div><div class="line">$ find /etc (列出/etc目录下所有的文件和目录，权限不足时会报错)</div><div class="line">$ find -ls (列出文件的拥有者，权限，大小等信息)</div><div class="line">$ find /etc -name passwd（根据名字查找）</div><div class="line">$ find /etc -iname <span class="string">'*passwd*'</span> （可以使用通配符）</div><div class="line">$ find /bigdata -size +10G （查找大小大于10G的文件）</div><div class="line">$ find /smalldata -size -5M (查找大小小于5M的文件)</div><div class="line">$ find /home -user chris -ls (输出/home目录下拥有者是chris的文件的详细信息)</div><div class="line">$ find /home -user chris -or -user joe -ls (输出/home目录下拥有者是chris或joe的文件的详细信息)</div><div class="line">$ find /home -not -user root -ls (输出/home目录下拥有者不是root的文件的详细信息)</div><div class="line">$ find /bin -perm 755 -ls（通过权限查找）</div><div class="line">$ find . -perm -002 -type f -ls （通过类型查找）</div></pre></td></tr></table></figure>
<p>find命令还有一个很棒的特性，可以使用-excute和-ok选项可以在查找到的任何文件上执行命令。excute选项会直接在每个找到的文件上执行命令，不会询问是否执行。而ok选项会在每个文件执行命令前询问是否执行。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">$ find /etc -iname iptables -exec <span class="built_in">echo</span> <span class="string">"I found &#123;&#125;"</span> \; </div><div class="line">I found /etc/bash_completion.d/iptablesI found /etc/sysconfig/iptables</div><div class="line"><span class="comment"># find /var/allusers/ -user joe -ok mv &#123;&#125; /tmp/joe/ \;</span></div><div class="line">mv ... /var/allusers/dict.dat &gt; ? ymv ... /var/allusers/five &gt; ? y</div></pre></td></tr></table></figure>
<blockquote>
<p><img src="https://pic.yupoo.com/jiananshi/a2e7f629/26416fb9.jpg" alt="提示"> 想了解更多关于find命令的信息，可以执行命令 man find</p>
</blockquote>
<h4 id="使用grep命令在文件中查找"><a href="#使用grep命令在文件中查找" class="headerlink" title="使用grep命令在文件中查找"></a>使用grep命令在文件中查找</h4><blockquote>
<p>如果希望查找包含特定内容的文件，可以使用grep命令。通过grep命令，可以搜索单个文件，也可以递归搜索整个目录。默认情况下，grep命令是大小写敏感的</p>
</blockquote>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">$ grep desktop /etc/services </div><div class="line">desktop-dna 2763/tcp <span class="comment"># Desktop DNA </span></div><div class="line">desktop-dna 2763/udp <span class="comment"># Desktop DNA</span>$ grep -i desktop /etc/servicessco-dtmgr 617/tcp <span class="comment"># SCO Desktop Administration Server</span></div><div class="line">sco-dtmgr 617/udp <span class="comment"># SCO Desktop Administration Server</span></div><div class="line">airsync 2175/tcp  <span class="comment"># Microsoft Desktop AirSync Protocol</span></div></pre></td></tr></table></figure>
<p>第一个例子，是在/etc/services文件中查找字符串desktop.第二个例子通过选项-i,在查找时大小写不敏感<br>-v 是查找不包含指定内容的行，-r是在目录中递归查找，-l是列出文件名 而不是包含内容的具体行</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">$ grep -v desktop /etc/services</div><div class="line">$ grep -rli peerdns /usr/share/doc/ </div><div class="line">/usr/share/doc/dnsmasq-2.66/setup.html </div><div class="line">/usr/share/doc/initscripts-9.49.17/sysconfig.txt</div></pre></td></tr></table></figure>
<p>以我大谢耳朵结尾吧，主要看气质，哈哈~~<br><img src="https://pic.yupoo.com/jiananshi/7c263228/40d5ee18.jpg" alt="sheldon"></p>

        
        </div>
        <footer class="article-footer">
            <div class="share-container">



</div>

    <a data-url="http://yemengying.com/2015/11/30/读书笔记-Linux-Bible-9th-Edition之玩转文本文件/" data-id="cjtvbucjz004zz15souie61ed" class="article-share-link"><i class="fa fa-share"></i>分享到</a>
<script>
    (function ($) {
        // Prevent duplicate binding
        if (typeof(__SHARE_BUTTON_BINDED__) === 'undefined' || !__SHARE_BUTTON_BINDED__) {
            __SHARE_BUTTON_BINDED__ = true;
        } else {
            return;
        }
        $('body').on('click', function() {
            $('.article-share-box.on').removeClass('on');
        }).on('click', '.article-share-link', function(e) {
            e.stopPropagation();

            var $this = $(this),
                url = $this.attr('data-url'),
                encodedUrl = encodeURIComponent(url),
                id = 'article-share-box-' + $this.attr('data-id'),
                offset = $this.offset(),
                box;

            if ($('#' + id).length) {
                box = $('#' + id);

                if (box.hasClass('on')){
                    box.removeClass('on');
                    return;
                }
            } else {
                var html = [
                    '<div id="' + id + '" class="article-share-box">',
                        '<input class="article-share-input" value="' + url + '">',
                        '<div class="article-share-links">',
                            '<a href="https://twitter.com/intent/tweet?url=' + encodedUrl + '" class="fa fa-twitter article-share-twitter" target="_blank" title="Twitter"></a>',
                            '<a href="https://www.facebook.com/sharer.php?u=' + encodedUrl + '" class="fa fa-facebook article-share-facebook" target="_blank" title="Facebook"></a>',
                            '<a href="http://pinterest.com/pin/create/button/?url=' + encodedUrl + '" class="fa fa-pinterest article-share-pinterest" target="_blank" title="Pinterest"></a>',
                            '<a href="https://plus.google.com/share?url=' + encodedUrl + '" class="fa fa-google article-share-google" target="_blank" title="Google+"></a>',
                        '</div>',
                    '</div>'
                ].join('');

              box = $(html);

              $('body').append(box);
            }

            $('.article-share-box.on').hide();

            box.css({
                top: offset.top + 25,
                left: offset.left
            }).addClass('on');

        }).on('click', '.article-share-box', function (e) {
            e.stopPropagation();
        }).on('click', '.article-share-box-input', function () {
            $(this).select();
        }).on('click', '.article-share-box-link', function (e) {
            e.preventDefault();
            e.stopPropagation();

            window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450');
        });
    })(jQuery);
</script>

            
    
        <a href="http://yemengying.com/2015/11/30/读书笔记-Linux-Bible-9th-Edition之玩转文本文件/#comments" class="article-comment-link disqus-comment-count" data-disqus-url="http://yemengying.com/2015/11/30/读书笔记-Linux-Bible-9th-Edition之玩转文本文件/">评论</a>
    

        </footer>
    </div>
    
        
<nav id="article-nav">
    
        <a href="/2015/12/24/读书笔记-Linux-Bible-9th-Edition之进程大法好/" id="article-nav-newer" class="article-nav-link-wrap">
            <strong class="article-nav-caption">上一篇</strong>
            <div class="article-nav-title">
                
                    读书笔记-Linux Bible 9th Edition之进程大法好
                
            </div>
        </a>
    
    
        <a href="/2015/11/26/读书笔记-Linux-Bible-9th-Edition之文件系统/" id="article-nav-older" class="article-nav-link-wrap">
            <strong class="article-nav-caption">下一篇</strong>
            <div class="article-nav-title">读书笔记-Linux Bible 9th Edition之文件系统</div>
        </a>
    
</nav>


    
    <script>
   DisqusJS.getArticleComments();
   </script>
</article>


    
    <section id="comments">
    
        
    <div id="disqus_thread">
        <noscript>Please enable JavaScript to view the <a href="//disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
    </div>

    
    </section>

</section>
            
        </div>
        <footer id="footer">
    <div class="outer">
        <div id="footer-info" class="inner">
            &copy; 2019 Mengying Ye<br>
            Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
        </div>
    </div>
</footer>
        
    
   <script>
   DisqusJS.getRecentComments(document.querySelector('#disqus-recent-comments'));
   </script>



    
        <script src="/lib/fancybox/jquery.fancybox.pack.js"></script>
    


<!-- Custom Scripts -->
<script src="/js/main.js"></script>

    </div>
</body>
</html>
